#include<iostream>
#include<functional>
using namespace std;

// 这个函数的功能和类内的成员是没有关系的，所以不用放在类内
// 其实这个函数是不适合当做线程池当中的任务去处理的，因为线程池内的线程数量是有限的
// 这种死循环的任务一旦给一个线程去做了，那么就一直占用着一个线程，无法归还，就会导致线程池中线程数量减少，等到有其他任务到来的时候就无法响应了
void serverIO(int sock)
{
    // 由于tcp面向字节流，因此在tcp中读写数据和文件是很类似的
    char buffer[1024];
    while(true)
    {
        ssize_t n = read(sock, buffer, sizeof(buffer)-1);
        if(n > 0)
        {
            // 读到的数据当成字符串
            buffer[n] = 0;
            cout << "recv message: " << buffer << endl;

            string outbuffer = "server[echo]: ";
            outbuffer += buffer;
            write(sock, outbuffer.c_str(), outbuffer.size());
        }
        else if(n == 0)
        {
            // 表示客户端退出
            logMessage(NORMAL, "client quit");
            break;
        }
        else
        {
            logMessage(FATAL, "read error");
            exit(1);
        }

    }
    close(sock); //关闭套接字(文件描述符)
}

class Task
{
    // typedef function<int(int, int)> fun_t; // 定义一个函数类型，返回值int，参数为(int, int)
    using func_t = function<void(int)>;
public:

    Task(){}
    Task(int sockfd, func_t func)
    :_sockfd(sockfd)
    ,_callback(func)
    {}

    void operator()()
    {
        _callback(_sockfd);
    }

private:   
    int _sockfd;
    func_t _callback;
};

